在Day12中,我們已經有了一個介面能夠依據使用者輸入的資訊,來計算並顯示便當數量、價格以及是否加購塑膠袋的清單,但是如果要真正送出這個清單(例如透過email),該怎麼做呢?
Intent,是一個用於傳訊(message)的物件,在另一個app特定的動作要求下執行在另一個app裡的activity。可查詢Common Intent來看常用的Intent有哪些。
Email Intent符合我們的需求,其中:
Action(動作常數)有3種:
Extras(額外資料)有6類:
ACTION_SENDTO
EXTRA_SUBJECT
和 EXTRA_TEXT
startActivity()
來啟動另一個app的Activity
:if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
//送出訂單
public void submitOrder(View view){
//取得是否加購塑膠袋
CheckBox plasticBagCheckBox = findViewById(R.id.addPlasticBag_checkbox);
boolean hasPlasticBag = plasticBagCheckBox.isChecked();
Log.v("MainActivity", "has plastic bag: " + hasPlasticBag);
//取得顧客姓名
EditText customerNameInput = findViewById(R.id.text_input_name);
String customerName = customerNameInput.getText().toString();
int price = calculatePrice();
if(hasPlasticBag==true){
price += 2;
}
String priceMessage = createOrderSummary(price, hasPlasticBag, customerName);
//displayMessage(priceMessage); //這行用不到了,註解掉
// 加入Intent
Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("mailto:")); // only email apps should handle this
intent.putExtra(Intent.EXTRA_SUBJECT, customerName + "先生/小姐 的訂單"); //主旨
intent.putExtra(Intent.EXTRA_TEXT, priceMessage); //內容
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
}
可觀察運作的結果:
在按下送出訂單鈕後,系統將把我們的資訊放入gmail app中,此時只要填入收件者名稱後,就可以送出了。